/********************************************************************/
/************** 为临时放置的后续可能会移到其他文件下的方法 *************/
/********************************************************************/

import type { CommonObj } from "@/types";

/**
 * 获取 css 变量的值
 * @tips 暂时没用上
 */
// export function getCssVarVal(name: string = "--color-primary") {
//   const val = getComputedStyle(document.documentElement).getPropertyValue(name); // 获取计算后的样式
//   if (!val) {
//     throw new Error(`不存在此CSS变量：${name}`);
//   }
//   return val;
// }

/**
 * 监测本地文件是否更改
 * @param {any} e 事件对象
 * @link 参考：https://geek-docs.com/html/html-ask-answer/256_html_check_if_file_has_changed_using_html5_file_api.html
 */
// export function checkFileChanged(e: any) {
//   const { lastModifiedDate: lastModified } = e.target.files[0];
//   const isChanged = localStorage.getItem("lastModified") !== lastModified.toString();
//   if (isChanged) localStorage.setItem("lastModified", lastModified);
//   return isChanged;
// }

/**
 * 将浏览器路径参数转为对象
 * @param searchStr string 要转化的字符串
 * @notice urlSearchToParams(`http://127.0.0.1:5174/test/10/3?id=3&age=&sex=&isAgree=true`)
 * 解析有误=> {http://127.0.0.1:5174/test/10/3?id: '3', age: '', sex: '', isAgree: 'true'}
 * 故暂时弃用
 */
// export function urlSearchToParams(searchStr = location.search.slice(1)) {
//   return Object.fromEntries(new URLSearchParams(searchStr));
// }

/**
 * 将浏览器路径参数转为对象
 * @param {string} searchStr 要转化的字符串
 * @param {string[]} noHandleKeys 不需要处理（转number、布尔值等）的字符串
 */
export function urlSearchToParams(path: string, noHandleKeys?: string[]) {
  if (!path) return "";
  const str = path.split("?")[1];
  const obj: CommonObj = {};
  str.split("&").forEach((item: string) => {
    let [key, val] = item.split("=");
    if (!noHandleKeys?.includes(key) && val !== "") {
      const num = Number(val);
      if (!isNaN(num)) {
        val = num as any;
      } else {
        if (val === "true") {
          val = true as any;
        } else if (val === "false") {
          val = false as any;
        }
      }
    }
    obj[key] = val;
  });
  return obj;
}

/**
 * 将浏览器路径对象转为参数
 * @param {object} params 要转化的参数
 */
export function urlParamsToSearch(params?: CommonObj) {
  if (!params) return "";
  let str: string = "";
  for (const key in params) {
    const val = params[key] ?? "";
    if (typeof val === "object")
      throw new Error("路由参数中不允许传入非基本数据类型的值");
    str += `&${key}=${val}`;
  }
  return str.slice(1);
}
